package com.sunrise.estoque.visao;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import lombok.Getter;
import lombok.Setter;

import org.primefaces.model.UploadedFile;
import org.springframework.stereotype.Component;

import com.sunrise.generico.dataModel.PessoaDataModel;
import com.sunrise.generico.dataModel.ProdutoDataModel;
import com.sunrise.generico.entidade.Configuracao;
import com.sunrise.generico.entidade.Filial;
import com.sunrise.generico.entidade.HistoricoMovimentacao;
import com.sunrise.generico.entidade.ModeloNF;
import com.sunrise.generico.entidade.MovimentacaoProduto;
import com.sunrise.generico.entidade.NaturezaNF;
import com.sunrise.generico.entidade.Pessoa;
import com.sunrise.generico.entidade.Produto;
import com.sunrise.generico.entidade.SerieNF;
import com.sunrise.generico.enums.StatusMovimentacao;
import com.sunrise.generico.enums.TipoMovimentacao;

@Component
public class MovimentacaoEstoqueForm {

	@Getter 
	@Setter
	private Configuracao configuracao;
	
	@Getter
	@Setter
	private TipoMovimentacao[] tiposMovimentacao;

	// Lista de produtos do autocomplete
	@Getter
	@Setter
	private Collection<Produto> produtosComplete;

	// Lista de produtos do modal que podem ser selecionados
	@Getter
	@Setter
	private ProdutoDataModel produtosSelecionar;

	// Lista de produtos do modal que foram selecionados
	@Getter
	@Setter
	private Produto[] produtosSelecionados;

	// Filtro de produtos dentro do modal de busca de produtos.
	@Getter
	@Setter
	private Produto produtoFiltro;

	// Produto a ser cadastrado de uma nota fiscal importada por xml
	@Getter
	@Setter
	private Produto cadastrarProduto;

	// Produto a ser removido na tabela de produtos de entreda da entidade
	@Getter
	@Setter
	private MovimentacaoProduto movProdRemover;

	@Getter
	@Setter
	private MovimentacaoProduto mpSelecionado;

	@Getter
	@Setter
	private BigDecimal custo;

	@Getter
	@Setter
	private BigDecimal precoVenda;

	// Lista de naturezas para combo
	@Getter
	@Setter
	private Collection<NaturezaNF> naturezasNF;

	// Lista de modelos de nf para combo
	@Getter
	@Setter
	private Collection<ModeloNF> modelosNF;

	// Lista de serie para combo
	@Getter
	@Setter
	private Collection<SerieNF> seriesNF;

	@Getter
	@Setter
	private UploadedFile file;

	@Getter
	@Setter
	private BigDecimal valorTotal;

	@Getter
	@Setter
	private BigDecimal unidadeTotal;

	@Getter
	@Setter
	private BigDecimal freteTotal;

	@Getter
	@Setter
	private BigDecimal despesasTotal;

	@Getter
	@Setter
	private BigDecimal descontosTotal;

	@Getter
	@Setter
	private BigDecimal seguroTotal;

	@Getter
	@Setter
	private BigDecimal icmsTotal;

	@Getter
	@Setter
	private BigDecimal ipiTotal;
	
	@Getter @Setter 
	private int tabAtiva;
	
	@Getter @Setter
	private boolean salvo;
	
	@Getter @Setter
	private boolean produtosAlterados;

	@Getter @Setter
	private String mensagemValidacao;
	
	@Getter @Setter
	private List<StatusMovimentacao> listaStatus;
	
	@Getter @Setter
	private String filtroNomeProduto;

	@Getter @Setter
	private StatusMovimentacao filtroStatusMovimentacao;
	
	@Getter @Setter
	private Date filtroDataMovimentacao;
	
	@Getter @Setter
	private Integer filtroNumeroNota;
	
	@Getter @Setter
	private Collection<HistoricoMovimentacao> historico;
	
	@Getter @Setter
	private Collection<Filial> filiais;
	
	@Getter @Setter
	private Long filtroFilial; 
	
	@Getter @Setter
	private MovimentacaoProduto produtoAlterar;
	
	@Getter @Setter
	private Pessoa fornecedorFiltro;
	
	@Getter @Setter
	private PessoaDataModel fornecedorSelecionar;
	
	@Getter @Setter
	private Pessoa transportadorFiltro;
	
	@Getter @Setter
	private PessoaDataModel transportadorSelecionar;
}
